package UseMap.LearnMap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MapMethod {
    public static void main(String[] args) {
        // practice();
        // practice01();
        // practice02();
        practice03();
    }
    // 接口Map的基本方法
    public static void practice(){
        Map<String,String> m = new HashMap<>();
        // 增
        m.put("小平","sao");// 相同键返回覆盖的值，不同键直接存入
        m.put("小同","big");
        // 查
        String x = m.get("小平");
        System.out.println(x);
        boolean xiaoping = m.containsKey("小平");//键是否存在，存在就是true，不存在就是false
        System.out.println(xiaoping);
        boolean sao = m.containsValue("sao");
        System.out.println(sao);
        boolean ise = m.isEmpty();
        System.out.println(ise); // 查询是否为空
        int size = m.size();
        System.out.println(size); // 查询键值对的长度
        // 删
        String result = m.remove("小"); // 通过键删除，没有返回null，有就返回值
        System.out.println(result);
        m.clear(); // 删除所有
        System.out.println(m);
    }
    // Map遍历的方式一：键找值的方式
    public static void practice01(){
        Map<String,String> map = new HashMap<>();
        map.put("小平","36d");
        map.put("小美","45f");
        map.put("小绿","32c");
        Set<String> mapKey = map.keySet();
        // 单列集合遍历一
        System.out.println("----增强for遍历----");
        for (String s : mapKey) {
            System.out.println(s+"="+map.get(s));
        }

        // 单列集合遍历二
        System.out.println("----迭代器遍历----");
        Iterator<String> it = mapKey.iterator();
        while (it.hasNext()){
            String next = it.next();
            System.out.println(next+"="+map.get(next));
        }
        // 单列集合遍历三
        System.out.println("----Lambada遍历----");
        mapKey.forEach(o->{
            System.out.println(o+"="+map.get(o));
        });
    }

    // Map遍历的方式二：键值对对象方式
    public static void practice02(){
        Map<String,String> m = new HashMap<>();
        m.put("好多","小平");
        m.put("好翘","小平");
        m.put("好大","小平");
        Set<Map.Entry<String, String>> entries = m.entrySet();
        // 增强for遍历
        System.out.println("----增强for遍历----");
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"="+value);
        }
        // 迭代器的遍历
        System.out.println("----迭代器遍历----");
        Iterator<Map.Entry<String, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            String key = next.getKey();
            String value = next.getValue();
            System.out.println(key+"="+value);
        }
        // lambada遍历
        System.out.println("----lambada遍历----");
        entries.forEach(o->{
            String key = o.getKey();
            String value = o.getValue();
            System.out.println(key+"="+value);
        });
    }

    // Map遍历方式三：lambada遍历
    public static void practice03(){
        Map<String,String> map = new HashMap<>();
        map.put("方法一","框架");
        map.put("方法二","理解");
        map.put("方法三","实践");
        // 匿名类方式
        System.out.println("----匿名类方式----");
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(key+"="+value);
            }
        });
        // lambada表达式
        System.out.println("----lambada表达式----");
        map.forEach((key,value)->{
            System.out.println(key+"="+value);
        });
    }
}
